/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import DAO.RecursoDAO;
import Model.Recurso;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Maury
 */
public class pesquisarRecurso extends Processor {

    @Override
    public void execute() throws ServletException, IOException {
        HttpSession session = getRequest().getSession();
        
        String link = getRequest().getParameter("link");
        if(link == null){
            link = (String) session.getAttribute("link");
            if(link == null){
                throw new ServletException();
            }
        }
        session.setAttribute("link", link);      
                
        String id = getRequest().getParameter("id");
        String nome = getRequest().getParameter("nome");
        Recurso recurso = null;
        
        if(id == null && nome == null){
            throw new NullPointerException("Id or nome is null");
        }

        if(!id.equals("") && id != null){
            int parametro = -1;
            try{
                parametro = Integer.parseInt(id);
            }catch(NumberFormatException e){
                String erro = "Id deve ser um número válido!";
                getRequest().setAttribute("erro", erro);
                RequestDispatcher rd = getRequest().getRequestDispatcher("pesquisarRecurso.jsp");
                rd.forward(getRequest(), getResponse());                    
            }

            //pesquisar recurso por id
            try{
                recurso = RecursoDAO.pesquisarById(parametro);
                if(recurso == null){
                    String erro = "Recurso não encontrado!";
                    getRequest().setAttribute("erro", erro);
                    RequestDispatcher rd = getRequest().getRequestDispatcher("pesquisarRecurso.jsp");
                    rd.forward(getRequest(), getResponse()); 
                }
                else{
                    getRequest().setAttribute("recurso", recurso);
                    RequestDispatcher rd = getRequest().getRequestDispatcher(link);
                    rd.forward(getRequest(), getResponse());
                }
            }
            catch(SQLException e){
                String erro = "Não é possível acessar o banco de dados!";
                getRequest().setAttribute("erro", erro);
                RequestDispatcher rd = getRequest().getRequestDispatcher("pesquisarRecurso.jsp");
                rd.forward(getRequest(), getResponse());
            }
            catch(Exception e){
                String erro = "Problema no sistema! Tente mais tarde!";
                getRequest().setAttribute("erro", erro);
                RequestDispatcher rd = getRequest().getRequestDispatcher("pesquisarRecurso.jsp");
                rd.forward(getRequest(), getResponse());
            }               

        }
        else if(!nome.equals("") && nome != null){
            //pesquisar recurso por nome
            try{
                recurso = RecursoDAO.pesquisarByNome(nome);
                if(recurso == null){
                    String erro = "Recurso não encontrado!";
                    getRequest().setAttribute("erro", erro);
                    RequestDispatcher rd = getRequest().getRequestDispatcher("pesquisarRecurso.jsp");
                    rd.forward(getRequest(), getResponse());                    
                }
                else{
                    getRequest().setAttribute("recurso", recurso);
                    RequestDispatcher rd = getRequest().getRequestDispatcher(link);
                    rd.forward(getRequest(), getResponse());
                }
            }
            catch(SQLException e){
                String erro = "Não é possível acessar o banco de dados!";
                getRequest().setAttribute("erro", erro);
                RequestDispatcher rd = getRequest().getRequestDispatcher("pesquisarRecurso.jsp");
                rd.forward(getRequest(), getResponse());
            }
            catch(Exception e){
                String erro = "Problema no sistema! Tente mais tarde!";
                getRequest().setAttribute("erro", erro);
                RequestDispatcher rd = getRequest().getRequestDispatcher("pesquisarRecurso.jsp");
                rd.forward(getRequest(), getResponse());
            }    
        }
        else{
            try {
                ArrayList<Recurso> recursos = RecursoDAO.pesquisarAll();
                if(recursos == null){
                    throw new ServletException();
                }
                
                if(recursos.isEmpty()){
                    String erro = "Nenhum recurso encontrado!";
                    getRequest().setAttribute("erro", erro);
                    RequestDispatcher rd = getRequest().getRequestDispatcher("pesquisarRecurso.jsp");
                    rd.forward(getRequest(), getResponse());
                }
                
                getRequest().setAttribute("link", link);
                getRequest().setAttribute("recursos", recursos);
                RequestDispatcher rd = getRequest().getRequestDispatcher("pesquisaRecursoResult.jsp");
                rd.forward(getRequest(), getResponse());                
            } catch (SQLException ex) {
                throw new ServletException("Error in Database!");
            } catch (ClassNotFoundException ex) {
                throw new ServletException("System Error!");
            }
        }
    }
    
}
